package com.bsj.sipgateway.web.controller;

import com.bsj.power.common.config.global.JsonResult;
import com.bsj.power.common.def.dto.AttentionDTO;
import com.bsj.power.common.def.vo.AttentionVO;
import com.bsj.sipgateway.web.service.AttentionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

/**
 * @Description 关注目录
 * @Author zhaoyang
 * @Date 2024/9/2 16:21
 * @menu 自定义分组
 */
@RestController
@RequestMapping(value = "/attention")
@Slf4j
//@SaCheckPermission("/video/attention")
public class AttentionController {

    @Autowired
    @Qualifier("attentionServiceImpl")
    private AttentionService attentionService;

    /**
     * 摄像头关注/取消关注（树结构中）
     *
     * @param did  设备数据库id
     * @param type 操作类型 1是关注0是取消关注
     * @return
     */
    @GetMapping("/deviceAttention")
    public JsonResult deviceAttention(@RequestParam Long did, @RequestParam Integer type) {
        // 如果是关注，就添加到默认列表中，如果是取消关注，就删除所有目录中的绑定关系
        return attentionService.deviceAttention(did, type);
    }


    /**
     * 在分组中取消关注
     *
     * @param aid 分组id
     * @param did 设备id
     * @return
     */
    @GetMapping("/cancelInGroup")
    public JsonResult cancelInGroup(@RequestParam Long aid, @RequestParam Long did) {
        // 在分组中取消关注，就删除该分组和该设备的对应关系，然后判断该设备和其他分组是否有绑定关系，
        // 如果没有了，就把tab_device的attention字段改为0（未关注）
        return attentionService.cancelInGroup(aid, did);
    }


    /**
     * 分组添加（仅添加分组名称没有设备）
     *
     * @param attentionDTO
     * @return
     */
    @PostMapping("/add")
    public JsonResult add(@RequestBody AttentionDTO attentionDTO) {
        return attentionService.add(attentionDTO);
    }


    /**
     * 分组删除
     *
     * @param attentionId 分组id
     * @return
     */
    @GetMapping("/delete")
    public JsonResult delete(@RequestParam Integer attentionId) {
        return attentionService.delete(attentionId);
    }


    /**
     * 摄像头绑定新分组（转移或复制）
     *
     * @param attentionId 绑定的新分组id
     * @param dids        摄像头id
     * @param type        操作类型1是转移2是复制
     * @return
     */
    @GetMapping("/attentionBindDevice")
    public JsonResult attentionBindDevice(@RequestParam Integer attentionId, @RequestParam String dids, @RequestParam Integer type) {
        return attentionService.attentionBindDevice(attentionId, dids, type);
    }


    /**
     * 获取自定义分组列表和绑定的设备
     *
     * @return
     */
    @GetMapping("/listAttentionAndDevices")
    public JsonResult listAttentionAndDevices() {
        return attentionService.listAttentionAndDevices();
    }


    /**
     * 获取用户关注的设备id集合
     *
     * @return
     */
    @GetMapping("/listUserAttentionDeviceIds")
    public JsonResult listUserAttentionDeviceIds() {
        return attentionService.listUserAttentionDeviceIds();
    }


    /**
     * 自定义分组复制
     *
     * @param attentionDTO
     * @return
     */
    @PostMapping("/copy")
    public JsonResult copy(@RequestBody AttentionDTO attentionDTO) {
        return attentionService.copy(attentionDTO);
    }

    /*========================================*/

    /**
     * 获取关注目录
     *
     * @return
     */
    @GetMapping("/listAttentions")
    public JsonResult<AttentionVO> listAttentions() {
        return attentionService.listAttentions();
    }


    /**
     * 分组修改
     *
     * @param attentionDTO
     * @return
     */
    @PostMapping("/update")
    public JsonResult update(@RequestBody AttentionDTO attentionDTO) {
        return attentionService.update(attentionDTO);
    }


}
